package savet.entidades.atributos;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import savet.entidades.Trabalhador;

@Entity
@Table
public class Rescisao implements Serializable {

    @Id
    private Long id;
    @OneToMany
    private List<AtributoData> pedidoDemissao;
    @OneToMany
    private List<AtributoData> avisoPrevio;
    @OneToMany
    private List<AtributoData> termo;
    @Transient
    private Trabalhador trabalhador;

    public List<AtributoData> getAvisoPrevio() {
        return avisoPrevio;
    }

    public void setAvisoPrevio(List<AtributoData> avisoPrevio) {
        for (AtributoData atributoData : avisoPrevio) {
            if (trabalhador.getAfastamento() == null
                    || atributoData.getData().getYear() != trabalhador.getAfastamento().getYear()
                    || trabalhador.getCodAfastamento().equals("S2")
                    || trabalhador.getCodAfastamento().equals("S3")
                    || trabalhador.getCodAfastamento().equals("I2")
                    || trabalhador.getCodAfastamento().equals("U1")
                    || trabalhador.getCodAfastamento().equals("U2")
                    || trabalhador.getCodAfastamento().equals("N1")
                    || trabalhador.getCodAfastamento().equals("L")) {
                atributoData.setEstado(Atributo.NAO_OBRIGATORIO);
            }
        }
        this.avisoPrevio = avisoPrevio;
    }

    public List<AtributoData> getPedidoDemissao() {
        return pedidoDemissao;
    }

    public void setPedidoDemissao(List<AtributoData> pedidoDemissao) {
        for (AtributoData atributoData : pedidoDemissao) {
            if (trabalhador.getAfastamento() == null
                    || atributoData.getData().getYear() != trabalhador.getAfastamento().getYear()
                    || trabalhador.getCodAfastamento().equals("S2")
                    || trabalhador.getCodAfastamento().equals("S3")
                    || trabalhador.getCodAfastamento().equals("H")
                    || trabalhador.getCodAfastamento().equals("I1")
                    || trabalhador.getCodAfastamento().equals("I2")
                    || trabalhador.getCodAfastamento().equals("U1")
                    || trabalhador.getCodAfastamento().equals("U2")
                    || trabalhador.getCodAfastamento().equals("N1")
                    || trabalhador.getCodAfastamento().equals("L")) {
                atributoData.setEstado(Atributo.NAO_OBRIGATORIO);
            }
        }
        this.pedidoDemissao = pedidoDemissao;
    }

    public List<AtributoData> getTermo() {
        return termo;
    }

    public void setTermo(List<AtributoData> termo) {
        for (AtributoData atributoData : termo) {
            if (trabalhador.getAfastamento() == null
                    || atributoData.getData().getYear() != trabalhador.getAfastamento().getYear()
                    || trabalhador.getCodAfastamento().equals("S2")
                    || trabalhador.getCodAfastamento().equals("S3")
                    || trabalhador.getCodAfastamento().equals("N1")
                    || trabalhador.getCodAfastamento().equals("L")) {
                atributoData.setEstado(Atributo.NAO_OBRIGATORIO);
            }
        }
        this.termo = termo;
    }

    public Trabalhador getTrabalhador() {
        return trabalhador;
    }

    public void setTrabalhador(Trabalhador trabalhador) {
        this.trabalhador = trabalhador;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Rescisao other = (Rescisao) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 97 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }
}
